package com.xuetang.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.xuetang.entity.Article;

/**
 * 文章数据访问接口
 */
@Mapper
public interface ArticleMapper {

    /**
     * 根据ID查询文章
     */
    Article selectById(@Param("id") Long id);

    /**
     * 插入文章
     */
    int insert(Article article);

    /**
     * 更新文章
     */
    int updateById(Article article);

    /**
     * 删除文章
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据分类查询文章列表
     */
    List<Article> selectByCategory(@Param("category") String category, @Param("offset") int offset,
            @Param("limit") int limit);

    /**
     * 根据分类统计文章数量
     */
    int countByCategory(@Param("category") String category);

    /**
     * 根据标题或摘要模糊查询
     */
    List<Article> searchArticles(@Param("keyword") String keyword, @Param("offset") int offset,
            @Param("limit") int limit);

    /**
     * 统计搜索结果数量
     */
    int countSearchArticles(@Param("keyword") String keyword);

    /**
     * 获取推荐文章列表
     */
    List<Article> selectRecommended(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 统计推荐文章数量
     */
    int countRecommended();

    /**
     * 获取热门文章列表
     */
    List<Article> selectHotArticles(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 统计热门文章数量
     */
    int countHotArticles();

    /**
     * 增加文章浏览量
     */
    int incrementViewCount(@Param("id") Long id);

    /**
     * 增加文章点赞数
     */
    int incrementLikeCount(@Param("id") Long id);

    /**
     * 增加文章收藏数
     */
    int incrementFavoriteCount(@Param("id") Long id);

    /**
     * 减少文章收藏数
     */
    int decrementFavoriteCount(@Param("id") Long id);

    /**
     * 分页查询所有文章（管理后台使用）
     */
    List<Article> selectPage(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 统计所有文章数量
     */
    int countAll();
}